# 在项目开发过层中尽量让lib是垂直关系，避免循环依赖；越是底层的库，越是往后面写！
# g++ ...  obj($?) -l(上层逻辑lib) -l(中间封装lib) -l(基础lib) -l(系统lib)  -o $@

SRC_ := $(wildcard ./*.cpp)
OBJ_ := $(patsubst ./%.cpp, ./%.o, $(SRC_))

# 由于当前目录下也有header文件，但是该header不会一起放入上层include目录，拿到最终的编译文件后，就不需要这些header和source_cpp文件了
INC_ := -I $(shell pwd)
# 编译的过程中使用到了静态库，所以需要把静态库串用脚本命令拼接下, shell命令包括awk中的$要写成双倍的$$
# awk -F 'lib' '{print $NF}'  // 打印出分割符号lib分割后的最后一个元素
# MY_STATIC_LIB := $(shell find $(STATIC_LIB_OUTPUT_DIR) -type f -name "*.a" | awk -F '/' '{print $NF }' | awk 'BEGIN{FS="lib"}{print $2}' | awk 'BEGIN{FS="."}{print "-l"$1}' | xargs echo)
MY_STATIC_LIB := $(shell ls -l $(STATIC_LIB_OUTPUT_DIR) | grep .a$$ | awk -F '/' '{print $$NF }' | awk 'BEGIN{FS="lib"}{print $$2}' | awk 'BEGIN{FS="."}{print "-l"$$1}' | xargs echo)

.PHONY : compile

# 当前src目录也可以放入其他的cpp和h文件(即不需要将所有的类都制作成静态库)，但如20行所示，会编译当前类下所有的cpp文件，要保证src下所有的cpp文件只有主cpp一个文件有main()方法，如果src下所有的cpp文件有超过1个main()方法，则会报错。
compile :
	@echo "---make $(TARGET) [start]---"
	$(CC) $(SRC_) $(CXFLAGS) $(MYSQL_LIB) $(INCLUDE) $(INC_) $(LIB) $(LDFLAGS) $(MY_STATIC_LIB) -o $(TARGET)
	mv $(TARGET) $(TARGET_OUTPUT_DIR)
	@echo "---make $(TARGET) [done] ---"
